{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBoost Parameter Tuning for Rental Listing Inquiries\n",
    "## 刘晓明 第三周作业（part 4）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第五步：\n",
    "## 调整树的行列重采样参数：subsample 和 colsample_bytree\n",
    "(粗调，参数的步长为0.1；下一步是在粗调最佳参数周围，将步长降为0.05，进行精细调整，由于计算慢，次步就不在进行)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先 import 必要的模块"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# drop ids and get labels\n",
    "y_train = train['interest_level']\n",
    "\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第二轮参数调整得到的n_estimators最优值（220，较第一次没有变化）\n",
    "### 同时使用已调优的其他参数\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "用交叉验证评价模型性能时，用scoring参数定义评价指标。评价指标是越高越好，因此用一些损失函数当评价指标时，需要再加负号，如neg_log_loss，neg_mean_squared_error "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58995, std: 0.00362, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.58727, std: 0.00286, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.58604, std: 0.00282, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.58592, std: 0.00336, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.58447, std: 0.00322, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.58431, std: 0.00294, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.58837, std: 0.00388, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.58681, std: 0.00345, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.58560, std: 0.00367, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.58509, std: 0.00424, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.58422, std: 0.00394, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.58387, std: 0.00409, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.58839, std: 0.00371, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.58671, std: 0.00400, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.58616, std: 0.00393, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.58498, std: 0.00323, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.58447, std: 0.00334, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.58392, std: 0.00370, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.58775, std: 0.00403, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.58630, std: 0.00369, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.58522, std: 0.00432, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.58411, std: 0.00359, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.58394, std: 0.00390, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.58324, std: 0.00369, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       " -0.583241679986479)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=220,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        reg_alpha =1,\n",
    "        reg_lambda =1,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([153.57078376, 184.37134547, 204.87191801, 212.44735126,\n",
       "        211.40389171, 215.13830514, 185.72202268, 213.82603016,\n",
       "        232.25568423, 237.54878707, 243.05350184, 238.55044436,\n",
       "        191.36254525, 218.34408855, 239.11727676, 246.91492271,\n",
       "        246.63510675, 249.40206509, 208.17250681, 240.1521359 ,\n",
       "        264.84874845, 272.37257881, 273.57964787, 245.86286254]),\n",
       " 'mean_score_time': array([0.68903942, 0.64323678, 0.65703759, 0.63163619, 0.63223615,\n",
       "        0.6378365 , 0.66563816, 0.64723701, 0.63983669, 0.64483676,\n",
       "        0.68203902, 0.61023488, 0.59363403, 0.58923368, 0.5802331 ,\n",
       "        0.57503295, 0.57643299, 0.58183322, 0.59883418, 0.62003555,\n",
       "        0.57763314, 0.58003316, 0.57583294, 0.50402894]),\n",
       " 'mean_test_score': array([-0.58995163, -0.58727403, -0.58603904, -0.58591883, -0.58447481,\n",
       "        -0.5843083 , -0.58836901, -0.58680835, -0.58559754, -0.58508812,\n",
       "        -0.58422165, -0.5838709 , -0.58838627, -0.5867057 , -0.58616137,\n",
       "        -0.58498192, -0.58447231, -0.58391542, -0.58775313, -0.58629584,\n",
       "        -0.58521957, -0.58411331, -0.58393565, -0.58324168]),\n",
       " 'mean_train_score': array([-0.52083728, -0.51772598, -0.51596343, -0.51472752, -0.51405386,\n",
       "        -0.51452479, -0.51794606, -0.5143445 , -0.51287312, -0.5120704 ,\n",
       "        -0.51165933, -0.51145359, -0.51533858, -0.51230777, -0.51008487,\n",
       "        -0.5092955 , -0.50897105, -0.50924421, -0.51349002, -0.50985874,\n",
       "        -0.50813107, -0.50737575, -0.5070955 , -0.5076172 ]),\n",
       " 'param_colsample_bytree': masked_array(data=[0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.7, 0.7, 0.7, 0.7, 0.7,\n",
       "                    0.7, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.9, 0.9, 0.9, 0.9,\n",
       "                    0.9, 0.9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_subsample': masked_array(data=[0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6, 0.7,\n",
       "                    0.8, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6,\n",
       "                    0.7, 0.8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'rank_test_score': array([24, 20, 15, 14,  9,  7, 22, 19, 13, 11,  6,  2, 23, 18, 16, 10,  8,\n",
       "         3, 21, 17, 12,  5,  4,  1]),\n",
       " 'split0_test_score': array([-0.58368386, -0.58232819, -0.58140701, -0.57982756, -0.57870727,\n",
       "        -0.57927448, -0.58167555, -0.58180317, -0.57940651, -0.57752671,\n",
       "        -0.5779335 , -0.57643355, -0.58205858, -0.58023649, -0.57966286,\n",
       "        -0.57987908, -0.57913137, -0.5773339 , -0.58114686, -0.57987753,\n",
       "        -0.57764033, -0.57836111, -0.57795533, -0.57737392]),\n",
       " 'split0_train_score': array([-0.52146641, -0.51825635, -0.51741305, -0.5159451 , -0.51506304,\n",
       "        -0.51606409, -0.51936856, -0.5168144 , -0.51409957, -0.5124269 ,\n",
       "        -0.51346731, -0.51268534, -0.51702319, -0.51491479, -0.5121678 ,\n",
       "        -0.51122028, -0.51175513, -0.5109961 , -0.51521965, -0.51151831,\n",
       "        -0.50893407, -0.50796631, -0.50832739, -0.5091505 ]),\n",
       " 'split1_test_score': array([-0.58946476, -0.58612697, -0.58516353, -0.58511002, -0.58401257,\n",
       "        -0.58362984, -0.58728667, -0.58480766, -0.58416936, -0.58418208,\n",
       "        -0.58156515, -0.58364082, -0.58658657, -0.5840798 , -0.58455788,\n",
       "        -0.58280213, -0.58252123, -0.58299194, -0.58631517, -0.58470928,\n",
       "        -0.58376633, -0.58214432, -0.58221412, -0.58105735]),\n",
       " 'split1_train_score': array([-0.52117045, -0.51774858, -0.51655127, -0.51559564, -0.51504516,\n",
       "        -0.51465162, -0.51819167, -0.51403084, -0.51317717, -0.51167129,\n",
       "        -0.51083861, -0.51105563, -0.51546863, -0.51204584, -0.50930747,\n",
       "        -0.50864393, -0.50879696, -0.5095556 , -0.51355828, -0.51037994,\n",
       "        -0.50882391, -0.50822879, -0.50640126, -0.50769098]),\n",
       " 'split2_test_score': array([-0.5895225 , -0.58793862, -0.58566529, -0.58682302, -0.58501271,\n",
       "        -0.58411145, -0.58879136, -0.58662173, -0.58633444, -0.5857132 ,\n",
       "        -0.58553812, -0.58402331, -0.5897881 , -0.58834898, -0.58635377,\n",
       "        -0.58608077, -0.58500324, -0.58460662, -0.58747622, -0.58758081,\n",
       "        -0.58632471, -0.58443319, -0.58309128, -0.58388912]),\n",
       " 'split2_train_score': array([-0.5206246 , -0.51715454, -0.51491921, -0.51348879, -0.51398294,\n",
       "        -0.51391803, -0.51887845, -0.51491331, -0.5132941 , -0.51215705,\n",
       "        -0.51212306, -0.5108126 , -0.51557984, -0.51185071, -0.50990994,\n",
       "        -0.50949115, -0.50894486, -0.50849091, -0.51285414, -0.50948158,\n",
       "        -0.50740242, -0.50751316, -0.50670396, -0.50663809]),\n",
       " 'split3_test_score': array([-0.59331558, -0.59012169, -0.58876282, -0.58890736, -0.5883278 ,\n",
       "        -0.58737681, -0.5910214 , -0.58888772, -0.58790545, -0.58840262,\n",
       "        -0.58763784, -0.58731251, -0.59106514, -0.58982885, -0.5894282 ,\n",
       "        -0.58739035, -0.58740499, -0.58671306, -0.59123775, -0.59000239,\n",
       "        -0.58837442, -0.58787608, -0.58835755, -0.58616536]),\n",
       " 'split3_train_score': array([-0.52058529, -0.5187105 , -0.51528342, -0.5144036 , -0.51336328,\n",
       "        -0.51471415, -0.517201  , -0.51352804, -0.5119767 , -0.51219649,\n",
       "        -0.51113216, -0.51230226, -0.51535698, -0.51155196, -0.51070819,\n",
       "        -0.50897604, -0.5079645 , -0.5092368 , -0.51332   , -0.50886066,\n",
       "        -0.50784653, -0.5067326 , -0.5074196 , -0.50766013]),\n",
       " 'split4_test_score': array([-0.59377262, -0.58985545, -0.58919753, -0.5889271 , -0.58631426,\n",
       "        -0.58714978, -0.59307152, -0.59192302, -0.59017333, -0.58961737,\n",
       "        -0.58843491, -0.58794554, -0.5924342 , -0.5910357 , -0.59080554,\n",
       "        -0.58875841, -0.58830188, -0.58793279, -0.5925911 , -0.58931013,\n",
       "        -0.58999347, -0.58775293, -0.58806124, -0.58772402]),\n",
       " 'split4_train_score': array([-0.52033963, -0.51675995, -0.51565022, -0.51420446, -0.51281491,\n",
       "        -0.51327608, -0.51609064, -0.51243591, -0.51181807, -0.51190027,\n",
       "        -0.51073549, -0.51041212, -0.51326424, -0.51117554, -0.50833096,\n",
       "        -0.50814612, -0.50739378, -0.50794162, -0.51249804, -0.50905322,\n",
       "        -0.50764844, -0.50643788, -0.50662529, -0.50694631]),\n",
       " 'std_fit_time': array([ 4.33825321,  4.29794577,  6.27501228,  6.48405062,  8.04395959,\n",
       "         5.32264387,  5.31908146,  5.95855206,  6.42639485,  7.93158981,\n",
       "         6.98788585,  5.22569964,  3.34453519,  0.85079601,  0.89249712,\n",
       "         1.26682155,  1.36362765,  1.22003126,  0.6955056 ,  1.23933207,\n",
       "         1.08626023,  0.73998747,  0.95418066, 32.72860375]),\n",
       " 'std_score_time': array([0.06846992, 0.02921393, 0.02194661, 0.01903373, 0.02692669,\n",
       "        0.01519827, 0.02928384, 0.01757832, 0.01599348, 0.02708943,\n",
       "        0.0570822 , 0.02778933, 0.00535199, 0.00611264, 0.00844811,\n",
       "        0.00831913, 0.00471621, 0.01200729, 0.01166945, 0.05995002,\n",
       "        0.00763198, 0.00809987, 0.00685308, 0.06257837]),\n",
       " 'std_test_score': array([0.00362276, 0.00286329, 0.0028198 , 0.00336324, 0.00322486,\n",
       "        0.00294375, 0.00388069, 0.00345163, 0.00366534, 0.00423995,\n",
       "        0.0039434 , 0.00409482, 0.00370958, 0.00399871, 0.00392626,\n",
       "        0.00322674, 0.00334303, 0.00370438, 0.0040332 , 0.00369294,\n",
       "        0.00432481, 0.00359088, 0.00389908, 0.00369482]),\n",
       " 'std_train_score': array([0.0004155 , 0.00070864, 0.0009053 , 0.00091094, 0.00089644,\n",
       "        0.00093261, 0.00117906, 0.00147185, 0.00085913, 0.00026028,\n",
       "        0.00102848, 0.0008822 , 0.00120135, 0.00133621, 0.0012991 ,\n",
       "        0.00105743, 0.0015022 , 0.00104214, 0.00093953, 0.00098113,\n",
       "        0.00062764, 0.00069117, 0.00070413, 0.00086799])}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.583242 using {'colsample_bytree': 0.9, 'subsample': 0.8}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\LXM\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb28dfd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
